/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.dp1.pucp.Logistica.Controlador;

import com.dp1.pucp.Logistica.DAO.*;
import com.dp1.pucp.Logistica.Vista.*;
import com.dp1.pucp.Modelo.Clases.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

/**
 *
 * @author ubuntu64
 */
public class AsignarInsumoProductoControlador {
    
    private TipoProductoDAO m;
    private AsignarInsumoProductoGUI InsumoProductoView;
    private RecetaPfMp receta;
    private Tipoproducto tipoProducto;
    private Tipoproducto tipoProductoMP;
    private int idTipoMP;
    private Tipoproducto tipoProductoPF;
    private Presentacion present;
    private ArrayList<RecetaPfMp> lstreceta;
    private ArrayList<RecetaPfMp> lstReceta;
    private ArrayList<RecetaPfMp> lstmerma;
    private MantTipoProductoControlador mantTipoProductoControlador;
    private AsignarInsumoProductoControlador asignarControlador;

     
    public AsignarInsumoProductoControlador(TipoProductoDAO dao, AsignarInsumoProductoGUI view, MantTipoProductoControlador buc, Tipoproducto tipoproducto,Presentacion presentacion,int o,int idtipomerma,int idtipoproductoMP,int idtipoproductoPF){
        m = dao;
        InsumoProductoView = view;
        mantTipoProductoControlador= buc;

        tipoProducto=tipoproducto;
        idTipoMP=idtipoproductoMP;
        present=presentacion;
        
        //inicializo grillo con materias primas iniciales
        listarDetalle(tipoProducto);

        InsumoProductoView.llenaComboTipoMerma(m.listarTipomermas());
        Tipomerma t=InsumoProductoView.getTipoMerma();
        
        if (present==null ){
        //hago el buscar materia prima
            InsumoProductoView.setFormAsignarInsumo(tipoProducto,o,t);
            
            if(tipoProducto.getTipo().equals("MP")==true){
            tipoProductoMP=tipoproducto;
            }
            
        }
        if(o==2 ){
        //hago el buscar presentacion    
            InsumoProductoView.setFormAsignarPresentacion(present,t);
        }
        InsumoProductoView.addBuscarMPListener(new buscarMPListener(this));
        InsumoProductoView.addBuscarPresListener(new AsignarInsumoProductoControlador.buscarPresListener(this));
        InsumoProductoView.addELiminarListener(new eliminarListener());
        InsumoProductoView.addLimpiarListener(new limpiarListener());              
        InsumoProductoView.addGuardarListener(new guardarTipoProductoListener());
        InsumoProductoView.addFinalizarListener(new FinalizarListener());   
    }
    
    public AsignarInsumoProductoControlador(TipoProductoDAO dao, AsignarInsumoProductoGUI view, MantTipoProductoControlador buc, Tipoproducto tipoproducto,Presentacion presentacion,int o){
        //Para levantar Materia Prima
        m = dao;
        InsumoProductoView = view;
        mantTipoProductoControlador= buc;

        tipoProducto=tipoproducto;
        present=presentacion;
        
        //inicializo grillo con materias primas iniciales
        listarDetalle(tipoProducto);

        InsumoProductoView.llenaComboTipoMerma(m.listarTipomermas());
        Tipomerma t=InsumoProductoView.getTipoMerma();
        
        if (present==null ){
        //hago el buscar materia prima
            InsumoProductoView.setFormAsignarInsumo(tipoProducto,o,t);
            
            if(tipoProducto.getTipo().equals("MP")==true){
                tipoProductoMP=tipoproducto;
            }
            
        }
        if(o==2 ){
        //hago el buscar presentacion    
            InsumoProductoView.setFormAsignarPresentacion(present,t);
        }
  
    }
    
    
    public void listarDetalle(Tipoproducto u){
        lstreceta = m.llenarRecetaProducto(u);               
        InsumoProductoView.llenaGrilla(lstreceta);        
    }
    
    class guardarTipoProductoListener implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            RecetaPfMp a = new RecetaPfMp();
            
            Tipomerma t=InsumoProductoView.getTipoMerma();
            int idMP=Integer.parseInt(InsumoProductoView.getIdTipoProductoMP());
            Tipoproducto tipoProductoMP=new Tipoproducto();
            tipoProductoMP.setIdtipoproducto(idMP);

            int idPF=Integer.parseInt(InsumoProductoView.getIdTipoProductoPF());
            Tipoproducto tipoProductoPF=new Tipoproducto();
            tipoProductoPF.setIdtipoproducto(idPF);
 
            a.setIdrecetaPfMp(InsumoProductoView.recetaPfMp.getIdrecetaPfMp());
            a.setTipoproductoByIdtipoproductoPf(tipoProductoPF);
            a.setTipoproductoByIdtipoproductoMp(tipoProductoMP);
            a.setCantidad(Float.parseFloat(InsumoProductoView.getCantidad()));
            a.setMerma(Float.parseFloat(InsumoProductoView.getMerma()));
            a.setTipomerma(t);
            
            if (receta!=null)
                a.setIdrecetaPfMp(receta.getIdrecetaPfMp());
            //validar que todos los campos sean no nulos para poder guardar
            m.guardarRecetaPfMp(a);
            
           InsumoProductoView.LimpiarDatos();
            
            lstreceta=m.listarReceta(idPF);
            InsumoProductoView.llenaGrilla(lstreceta);          
        }
    }
    
    public void listarReceta(int q){
        lstreceta = m.listarReceta(q);               
        InsumoProductoView.llenaGrilla(lstreceta);        
    }
    
    class eliminarListener implements ActionListener {
        
        @Override
        public void actionPerformed(ActionEvent e) {            
            int sel=InsumoProductoView.getFilaSel();
            if (sel!=-1){
                RecetaPfMp u = lstreceta.get(sel);                
                
                m.eliminarReceta(u);
                lstreceta = m.listarReceta(u.getTipoproductoByIdtipoproductoPf().getIdtipoproducto());
                
                InsumoProductoView.mostrarAviso("Se elimino el producto con éxito");
                InsumoProductoView.llenaGrilla(lstreceta);               
            }
        }
    }
    
    class cancelarListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            InsumoProductoView.dispose();
        }        
    } 
    
    class FinalizarListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            
            InsumoProductoView.mostrarAviso("Se guardo exitosamente la receta");
            InsumoProductoView.dispose();
        }        
    } 
    
    class buscarMPListener implements ActionListener{
        
        private AsignarInsumoProductoControlador buc;
        public buscarMPListener(AsignarInsumoProductoControlador buscarusr){
            buc=buscarusr;
        }
              
        @Override
        public void actionPerformed(ActionEvent e) {
            BuscarMateriaPrimaGUI p = new BuscarMateriaPrimaGUI(InsumoProductoView.getPadre(), true);
            BuscarMateriaPrimaControlador d = new BuscarMateriaPrimaControlador(m,p,InsumoProductoView);
            p.setVisible(true);
        }      
    }
    
    class buscarPresListener implements ActionListener{
        
        private AsignarInsumoProductoControlador buc;
        public buscarPresListener(AsignarInsumoProductoControlador buscarusr){
            buc=buscarusr;
        }
              
        @Override
        public void actionPerformed(ActionEvent e) {
            BuscarPresentacionGUI p = new BuscarPresentacionGUI(InsumoProductoView.getPadre(), true);
            BuscarPresentacionControlador d = new BuscarPresentacionControlador(m,p,InsumoProductoView);
            p.setVisible(true);
        }      
    }
           
    
    class limpiarListener implements ActionListener{
        @Override
        public void actionPerformed(ActionEvent e) {
            InsumoProductoView.LimpiarDatos();
        }        
    }
}
